package main

import (
	"fmt"
	"os"
)

//函数版学生管理系统，能够查看所有的学生，新增学生，删除学生

type student struct {
	id   int64
	name string
}

var (
	allStudent map[int64]*student //变量声明
)

//student类型的函数
func newStudent(id int64, name string) *student {
	return &student{
		id:   id,
		name: name,
	}
}

func showAllStudent() {
	//把所有的学生打印出来
	fmt.Println("现有所有学生：")
	for _, v := range allStudent {
		fmt.Printf("学号=%d 姓名=%s \n", v.id, v.name)
	}
}

func addStudent() {
	//向allStudent添加一个新学生
	//1.1获取用户输入
	var (
		id   int64
		name string
	)
	fmt.Printf("请输入学号：")
	fmt.Scanln(&id)
	fmt.Printf("请输入姓名：")
	fmt.Scanln(&name)

	//1.2造学生，调用构造函数
	/* newStu := &student{
		id:   id,
		name: name,
	} */
	newStu := newStudent(id, name)
	allStudent[id] = newStu
	showAllStudent()

}

func editStudent() {
	var (
		id   int64
		name string
	)
	fmt.Printf("请输入要修改的学生的学号：")
	fmt.Scanln(&id)
	value, ok := allStudent[id]
	if !ok {
		fmt.Println("查无此学号")
		os.Exit(1)
	}
	fmt.Println("要修改人员的姓名:" + value.name)
	fmt.Printf("请输入修改后的姓名：")
	fmt.Scanln(&name)
	value.name = name
	allStudent[id] = value

	fmt.Println("学生已修改！")
	showAllStudent()
}

func deleteStudent() {
	var (
		id int64
	)
	fmt.Printf("请输入要要删除学生的学号：")
	fmt.Scanln(&id)
	delete(allStudent, id)
	fmt.Println("学生已删除！")
	showAllStudent()
}

func main() {
	allStudent = make(map[int64]*student, 48) //初始化，(开辟内存)

	for {
		//1.打印菜单
		fmt.Println("欢迎光临学生管理系统")
		fmt.Println(`
	1.查看所有学生
	2.新增学生
	3.修改学生
	4.删除学生
	5.退出bool`)
		fmt.Printf("请输入你的选择项目：")
		//2.等待用户选择，要做什么
		var choice int
		fmt.Scanln(&choice)
		fmt.Printf("你选择了%d这个选项！\n", choice)
		//3.执行对应的函数
		switch choice {
		case 1:
			showAllStudent()
		case 2:
			addStudent()
		case 3:
			editStudent()
		case 4:
			deleteStudent()
		case 5:
			os.Exit(1) //退出
		default:
			fmt.Println("请输入正确的选项！")
		}
	}
}
